/* 
基础数据类型
1. boolean
2. number
3. string
4. null和undefined
5. 数组
6. 元组(Tuple) 
7. 枚举(enum)
8. any
9. void
10. object
*/

(function () {
  // 1. boolean
  let isDone: boolean = false
  isDone = true
  // isDone = 3  // error

  // 2. number
  let age: number = 3
  // age = '3'  // error

  // 3. string
  let name: string = 'tom'
  let info: string = `我叫${name} 今年${age}`

  // 4. null和undefined     是任意类型的子类型
  let u: null = null
  // u = 'abc' // error
  info = null
  let un: undefined = undefined
  // un = 123  // error
  info = undefined


  // 5. 数组
  let arr: string[] = ['abc', '1', /* 1 */]
  arr.push('true')
  // arr.push(true)  // error
  let arr2: Array<number> = [2, 4, /* true */]

  // 6. 元组(Tuple) 
  let t: [number, string] = [23, 'tom']

  // 7. 枚举(enum)
  enum Color {
    RED=1,
    GREEN,
    BLUE
  }

  const color: Color = Color.BLUE
  console.log(Color)
  console.log(color)

  // 8. any
  let a: any = 12
  a = 'abc'
  let arr3: Array<any> = [1, 'abc', true, {}]

  // 9. void  用来说明函数没有返回值
  function fn(): void {
    // return 123 // error
    // return undefined
    return null
  }


  // 10. object
  let obj: object = {}
  obj = []
  obj = () => {}
  // obj = 123 // error

})()

/* 
强类型的好处:
  正确语法的提示补全
  错误语法的错误提示
*/